<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>78_setup上下文对象</title>
</head>

<body>
    <div id="app">
        <!-- 模板上不需要写value，直接使用数据 -->
        <p>a:{{a}}</p>
        <input type="button" value="修改a" @click="incA">
    </div>
</body>
<script src="./js/vue.global.js"></script>
<script>

    const { createApp, ref } = Vue

    
    const app = createApp({
        setup(){            
            // 一、setup里面的this不是vue对象。

            console.log("this",this);

            // a就相当于选项式api中data中的a。
            let a = ref(10);
            console.log("a",a);//a是个对象，响应式的。a.value的值是10。

            // incA就相当于选项式api中的methods。
            function incA(){
                console.log("incA");
                a.value++;
            }

            // 二、
            // setup函数里面的数据，方法等等，如果希望模板或者其它选项式api中使用的话，就需要return。
            // 通俗来说：setup函数返回的数据，方法等等，会挂载在vue对象上。
            return { 
                a,//返回 ref的对象时，会自动浅层解包（简单粗暴理解：返回的是a.value ），既就是，外部使用a的时候，不需要写value了。
                incA 
            }
        },
        mounted(){
            console.log("this.a",this.a);
            // this.incA();
        }
       
    })
    


    app.mount('#app')
</script>

</html>